/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cinema.model;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import cinema.controler.CinemaControler;

/**
 *
 * @author AlisonSM
 */
public class Arquivo {
     private FileWriter arquivoSessões;
     private FileWriter arquivoSalas;
     private FileWriter arquivoCSV;
     private FileReader filereaderSessões;
     private FileReader filereaderSalas;
     private FileReader filereader;
     
     public Arquivo(){
         arquivoSessões = null;
         arquivoSalas = null;
         filereaderSalas = null;
         filereaderSalas = null;
         filereader = null;
         arquivoCSV = null;
     }
     
     public void Salvar(ArrayList<Sessão> sessões, ArrayList<Sala> salas){
         try {
             arquivoSessões = new FileWriter ("arquivoSessões.txt");
             arquivoSalas = new FileWriter ("arquivoSalas.txt");
             
             if(sessões.isEmpty()==false){
                for (Sessão sessão : sessões){
                    arquivoSessões.write(sessão.getNomeFilme() + "," + sessão.getData() + "," + sessão.getHora() + "," + sessão.getSala().getNumSala() + "," + sessão.getIngressosVendidos() + "," + "\r\n");
                }
                arquivoSessões.close();
             }
             
             for (Sala sala : salas){
               arquivoSalas.write(sala.getNumSala() + "," + sala.getLotação() + "," + "\r\n");
             }
             arquivoSalas.close();
             
         } catch (IOException ex) {
             Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
         }
     }
    
     public void LêArquivo(Cinema cinema, CinemaControler controler){
         if(verificaArquivoVazio(cinema)==false){
             File fileSessões = new File("C:/Users/AlisonSM/Documents/NetBeansProjects/Cinema/arquivoSessões.txt");
             File fileSalas = new File("C:/Users/AlisonSM/Documents/NetBeansProjects/Cinema/arquivoSalas.txt");
         try {
             filereaderSessões = new FileReader(fileSessões);
             filereaderSalas = new FileReader(fileSalas);
             
             BufferedReader readerSessões = new BufferedReader(filereaderSessões); 
             BufferedReader readerSalas = new BufferedReader(filereaderSalas);
             String linha;
             int index = 0;
                 try {
                     while ((linha = readerSalas.readLine()) != null) {
                         String[] salas = linha.split(",");
                         cinema.addSala(Integer.parseInt (salas[1]));
                     }
                     readerSalas.close();
                     
                     if(cinema.getSalas().isEmpty()==false){
                        while ((linha = readerSessões.readLine()) != null) {
                            String[] sessão = linha.split(",");
                            if(!" ".equals(sessão[0])){
                                String nomeFilme = sessão[0];
                                String data = sessão[1];
                                String horario = sessão[2];
                                int numSala = Integer.parseInt (sessão[3]);
                                int ingressosvendidos = Integer.parseInt (sessão[4]);
                                cinema.addSessão(nomeFilme, data, horario, numSala-1);
                                cinema.getSessões().get(index).setIngressosVendidos(ingressosvendidos);
                                controler.mostrarSessãonaJtable(nomeFilme, data, horario, numSala-1);
                                index++;
                            }
                        }
                        readerSessões.close();
                     }
                     
                 } catch (IOException ex) {
                     Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
                 }
             
         } catch (FileNotFoundException ex) {
             Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
         }
         }
     }
     
     public boolean verificaArquivoVazio(Cinema model){
         boolean opção = true;
         if (new File("C:/Users/AlisonSM/Documents/NetBeansProjects/Cinema/arquivoSalas.txt").canRead()==true
             && new File("C:/Users/AlisonSM/Documents/NetBeansProjects/Cinema/arquivoSessões.txt").canRead()==true){    
             File file = new File("C:/Users/AlisonSM/Documents/NetBeansProjects/Cinema/arquivoSalas.txt");
             try {
                 filereader = new FileReader(file);
             } catch (FileNotFoundException ex) {
                 Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
             }
             BufferedReader reader = new BufferedReader(filereader);
             String linha;
             try {
                 if(reader.readLine() != null){
                     linha = reader.readLine();
                     String [] salas = linha.split(",");
                     if(!" ".equals(salas[0])){    
                        opção=false;
                     }
                 }
             } catch (IOException ex) {
                 Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
             }
         }
         return opção;
     }
     
     public void gerarCSV (ArrayList<Sessão> sessões){
         try {
             arquivoCSV = new FileWriter ("arquivoCSV.csv");
             arquivoCSV.write("Relatorio de vendas:"+ "\r\n\n");
             arquivoCSV.write("Nome do Filme;Data;Horario;Sala;Capacidade da Sala;Ingressos Vendidos\r\n");
             if(sessões.isEmpty()==false){
                for (Sessão sessão : sessões){
                    arquivoCSV.write(sessão.getNomeFilme() + ";" + sessão.getData() + ";" + sessão.getHora() + ";" + sessão.getSala().getNumSala() + ";" + sessão.getSala().getLotação() + ";" + sessão.getIngressosVendidos() + "\r\n");
                }
                arquivoCSV.close();
             }
         } catch (IOException ex) {
             Logger.getLogger(Arquivo.class.getName()).log(Level.SEVERE, null, ex);
         }            
     }
}
